package objects 
{
	import flash.geom.Point;
	import starling.display.Image;
	import starling.display.Sprite;
	import objects.MyObject;
	import starling.events.Event;
	import starling.filters.BlurFilter;
	import com.greensock.*; 
	import com.greensock.easing.*;
	/**
	 * ...
	 * @author Vượng
	 */
	public class Boom extends MyObject 
	{
		public var m_startPos:Point;// điểm bắt đầu của viên đạn
		public var m_maxTimeLive : Number;// thời gian bay của viên đạn
		public var m_timeLive : Number;//Thời gian sống của viên đạn
		public var m_isTarget : Boolean;
		public var m_active : Boolean;
		public var m_testOnlyTween:Boolean;//Kiểm tra để gọi tween một lần duy nhất(vì chỉ cần gọi 1 lần mà thôi)
		
		public function Boom(_sprite : Sprite, _pos : Point, t : Number, max_V : Number, _damage : Number, _maxdamge : Number) 
		{
			super();
			//khởi tạo giá trịc cho các biến
			m_testOnlyTween = false;
			m_startPos = _pos;
			m_pos = _pos;
			m_timeLive = 0;
			m_maxTimeLive = t;
			m_minDamage = _damage;
			m_maxDamage =  _maxdamge;
			
		    m_isTarget = false;
			m_active = false;
			m_maxVelocity = max_V;
			m_collision = false;
			// thêm event và add vào sprite cha
			this.addEventListener(Event.ADDED_TO_STAGE, init);			
			_sprite.addChild(this);
		}
		
		private function init(event:Event):void
		{
			this.removeEventListener(Event.ADDED_TO_STAGE, init);
		    this.m_spriteImage = new Image(Assets.getTexture("boom"));
			this.setAnchorPoint();
			this.setPos(m_pos);
			this.addChild(m_spriteImage);
		}
		
		private function setAnchorPoint():void 
		{
			m_spriteImage.pivotX = m_spriteImage.width / 2*m_spriteImage.scaleX ;
			m_spriteImage.pivotY = m_spriteImage.height / 2 *m_spriteImage.scaleX;
		}
		
		private function setPos ( _pos : Point) : void
		{
			m_spriteImage.x = _pos.x;
			m_spriteImage.y = _pos.y;
		}
		
		private function setScale ( _scale : Number) :void
		{
			m_spriteImage.scaleX = _scale;
			m_spriteImage.scaleY = _scale ;
		}
		
		public function setTarget (_target : Point) :void
		{
			if ( m_isTarget == false)
			{
				m_targetPos =  _target;
				m_isTarget = true;
			}
		}
		
		override public function release() : void {
			this.removeChild(m_spriteImage);
		}
		
	    override public function update(dt:Number):void
		{
			if( m_choosedEnemy!=null && m_choosedEnemy.m_hp <=0 ) //target chet'
	        {
		       m_choosedEnemy = null;
		       m_isTarget = false ;
	        }
		    if ( m_isTarget == true)
			{
				if (m_testOnlyTween == false)
				{
					m_testOnlyTween = true;
					TweenMax.to(this.m_spriteImage,m_maxTimeLive, {bezierThrough:[{x:(m_targetPos.x-m_startPos.x)/2+m_startPos.x, y:m_startPos.y-50}, {x:m_targetPos.x, y:m_targetPos.y}], orientToBezier:true,ease:Quad.easeIn});
				}
				m_timeLive += dt;
				if ( m_timeLive >= m_maxTimeLive)
				{
					m_timeLive = 0;
					m_collision = true;
					ManagerEffect.instance.AddEff(new Boom_Eff(ManagerEffect.instance.m_layer,new Point( this.m_spriteImage.x,this.m_spriteImage.y),m_minDamage, m_maxDamage));
				}			
			}
		}
	}

}